// 导入数据库模块
const db = require('../db/index');

const bcryptjs = require('bcryptjs');

// 定义  个人中心-获取用户的基本信息 处理函数
getUserInfo = (req, res) => {
    // console.log(req.user); // req.user 是在置成功了 express-jwt 这个中间件以后 才能把解析出来的用户信息 挂载到req.user属性上
    // 从数据库取数据返回给客户端
    // 定义sql查询语句
    const sqlStr = 'select * from ev_users where id=?';
    db.query(sqlStr, req.user.id, (err, result) => {
        // console.log(result);
        if (err) return res.cc(err);
        res.send({
            status: 0,
            message: '获取用户基本信息成功！',
            data: {
                id: result[0].id,
                username: result[0].username,
                nickname: result[0].nickname,
                email: result[0].email,
                user_pic: result[0].user_pic
            }
        })
    });
    // res.send('获取用户的基本信息 ok');
};
// 定义  个人中心-更新用户的基本信息 处理函数
updateUserInfo = (req, res) => {
    // console.log(req.user);
    // console.log('-------');
    // console.log(req.body);
    // 验证表单数据的合法性 通过验证模块 @escook / express - joi 和 joi 完成
    // 定义sql语句
    const sqlStr = `update ev_users set ? where id=${req.user.id}`;
    // const sqlStr = `update ev_users set ? where id=?`;
    db.query(sqlStr, req.body, (err, result) => {
        console.log(result);
        if (err) return res.cc(err);
        res.send({
            "status": 0,
            "message": "修改用户信息成功！"
        })
    })
};
// 定义  个人中心-重置密码 处理函数
resetSecret = (req, res) => {
    // 定义 sql 语句
    // console.log(req.user);
    const sqlStr = `select * from ev_users where id=?`;
    db.query(sqlStr, req.user.id, (err, result) => {
        // console.log(result[0]);
        // console.log(req.body);
        if (err) return res.cc(err);
        // 根据ID查询用户是否存在
        if (result.length === 0) return res.cc('没有该用户信息，重置密码失败');
        // 判断用户密码是否正确
        const compareResult = bcryptjs.compareSync(req.body.oldPwd, result[0].password);
        if (!compareResult) return res.cc('原密码输入错误！');
        // 重置密码
        // 定义 sqlStr 更新密码的语法
        const sqlUpdate = `update ev_users set password=? where id=?`;
        // 对新密码进行加密处理
        req.body.newPwd = bcryptjs.hashSync(req.body.newPwd, 10);
        db.query(sqlUpdate, [req.body.newPwd, req.user.id], (err, result) => {
            if (err) return res.cc(err);
            res.send({
                status: 0,
                message: '更新密码成功！'
            });
        });
    });
};
// 定义  个人中心-更换头像 处理函数
changeAvatar = (req, res) => {
    const sqlString = `update ev_users set user_pic=? where id=?`;
    db.query(sqlString, [req.body.avatar, req.user.id], (err, result) => {
        if (err) return res.cc(err);
        // 执行sql语句 但是影响行数不等于1
        if (result.affectedRows !== 1) return res.cc('更新头像失败！');
        res.send({
            status: 0,
            message: '更新头像成功！'
        })
    })
};

// 暴漏函数
module.exports = {
    getUserInfo,
    updateUserInfo,
    resetSecret,
    changeAvatar
}